<!DOCTYPE html>
<html lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>pose_average [HALCON算子参考手册]</title>
<style type="text/css">
      body {
    color: #000000;
    background-color: #ffffff;
    margin: 0;
    font-family: Arial, Helvetica, sans-serif;
}

.body_main {
    margin-left: 35px;
    margin-right: 35px;
}

@media screen and (min-width:992px) {

    .body_main {
        margin-left: 10%;
        margin-right: 10%;
    }

    table.toctable {
        width: 80%
    }
}

@media screen and (min-width:1400px) {

    .body_main {
        margin-left: 15%;
        margin-right: 15%;
    }

    table.toctable {
        width: 70%
    }
}

body>div ul ul {
    margin-left: inherit;
}

a:link {
    color: #0044cc;
}

a:link,
a:visited {
    text-decoration: none;
}

a:link:hover,
a:visited:hover {
    text-decoration: underline;
}

th {
    text-align: left;
}

h1,
h2,
h3,
h4,
h5,
h6 {
    text-rendering: optimizeLegibility;
    color: #666666;
}

code {
    font-family: monospace,monospace;
}

h1 a.halconoperator {
    font-family: Arial, Helvetica, sans-serif;
    color: #666666;
}

h2 a.halconoperator {
    font-family: Arial, Helvetica, sans-serif;
    color: #666666;
}

hr {
    border: 0;
    border-top: solid 1px #f28d26;
}

.pre {
    display: block;
    padding-bottom: 1ex;
    font-family: monospace;
    white-space: pre;
}

pre {
    font-family: monospace, monospace;
    padding: 1ex;
    white-space: pre-wrap;
}

.toc {
    font-size: 80%;
    border-top: 1px dashed #f28d26;
    border-bottom: 1px dashed #f28d26;
    padding-top: 5px;
    padding-bottom: 5px;
}

.inv {
    margin: 0;
    border: 0;
    padding: 0;
}

.banner {
    color: #666666;
    padding-left: 1em;
}

.logo {
    background-color: white;
}

.keyboard {
    font-size: 80%;
    padding-left: 3px;
    padding-right: 3px;
    border-radius: 5px;
    border-width: 1px;
    border-style: solid;
    border-color: #f28d26;
    background-color: #f3f3f3;
}

.warning {
    margin-top: 2ex;
    margin-bottom: 1ex;
    padding: 10px;
    text-align: center;
    border: 1px solid;
    color: #bb0000;
    background-color: #fff7f7
}

.imprint {
    margin-top: 1ex;
    font-size: 80%;
    color: #666666;
}

.imprinthead {
    font-weight: bolder;
    color: #666666;
}

.indexlink {
    text-align: right;
    padding-bottom: 5px;
}

.postscript {
    margin-top: 2ex;
    font-size: 80%;
    color: #666666
}

.evenrow {
    background-color: #e7e7ef;
    vertical-align: top;
}

.oddrow {
    background-color: #f7f7ff;
    vertical-align: top;
}

.headrow {
    background-color: #97979f;
    color: #ffffff;
    vertical-align: top;
}

.logorow {
    vertical-align: top;
}

.error {
    color: red;
}

.var {
    font-style: italic
}

.halconoperator {
    font-family: monospace, monospace;
}

span.operator {
    font-family: monospace, monospace;
}

span.procedure {
    font-family: monospace, monospace;
}

span.operation {
    font-family: monospace, monospace;
}

span.feature {
    font-family: Arial, Helvetica, Homerton, sans-serif;
}

ul {
    padding-left: 1.2em;
}

li.dot {
    list-style-type: square;
    color: #f28d26;
}

.breadcrumb {
    font-size: 80%;
    color: white;
    background-color: #062d64;
    margin-bottom: 20px;
    padding-left: 35px;
    padding-right: 35px;
    padding-bottom: 15px;
}

.webbar {
    font-size: 80%;
    background-color: #dddddd;
    margin-top: 0px;
    margin-left: -35px;
    margin-right: -35px;
    margin-bottom: 0px;
    padding-top: 5px;
    padding-left: 35px;
    padding-right: 35px;
    padding-bottom: 5px;
}

.footer {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    border-top: 1px dashed #f28d26;
    font-size: 80%;
    color: #666666;
    padding-bottom: 8px;
}

.footer .socialmedia a {
    padding-left: 7px;
}

.socialmedia {
    padding-top: 10px;
}

.copyright {
    margin-top: 19px;
}

.breadcrumb a {
    color: #ffffff;
    border-bottom: 1px solid white;
}

.breadcrumb a:link:hover,
.breadcrumb a:visited:hover {
    text-decoration: none;
    border-bottom: none;
}

.heading {
    margin-top: 1ex;
    font-size: 110%;
    font-weight: bold;
    color: #666666;
}

.text {
    color: black;
}

.example {
    font-size: 80%;
    background-color: #f3f3f3;
    border: 1px dashed #666666;
    padding: 10px;
}

.displaymath {
    display: block;
    text-align: center;
    margin-top: 1ex;
    margin-bottom: 1ex;
}

.title {
    float: left;
    padding-top: 3px;
    padding-bottom: 3px;
}

.signnote {
    font-family: Arial, Helvetica, Homerton, sans-serif;
    font-size: 80%;
    color: #666666;
    font-weight: lighter;
    font-style: italic
}

.par {
    margin-bottom: 1.5em;
}

.parhead {
    text-align: right;
}

.parname {
    float: left;
}

.pardesc {
    font-size: 85%;
    margin-top: 0.5em;
    margin-bottom: 0.5em;
    margin-left: 2em;
}

.parcat {
    color: #666;
    font-weight: bold;
}

*[data-if=cpp],
*[data-if=c],
*[data-if=dotnet],
*[data-if=com],
*[data-if=python] {
    display: none;
}

.tabbar {
    text-align: right;
    border-bottom: 1px solid #f28d26;
    margin-bottom: 0.5em;
}

ul.tabs {
    padding-top: 3px;
    padding-bottom: 3px;
    margin-top: 10px;
    margin-bottom: 0;
    font-size: 80%
}

ul.tabs li {
    padding-top: 3px;
    padding-bottom: 3px;
    display: inline;
    overflow: hidden;
    list-style-type: none;
    margin: 0;
    margin-left: 8px;
    border-top: 1px solid #666;
    border-left: 1px solid #666;
    border-right: 1px solid #666;
}

ul.tabs li.active {
    border-left: 1px solid #f28d26;
    border-right: 1px solid #f28d26;
    border-top: 1px solid #f28d26;
    border-bottom: 1px solid #fff;
}

ul.tabs li.inactive {
    background-color: #eee;
}

ul.tabs li a {
    padding-left: 5px;
    padding-right: 5px;
    color: #666;
}

ul.tabs li a:link:hover {
    text-decoration: none;
}

ul.tabs li.inactive a {
    color: #666;
}

ul.tabs li.active a {
    color: black;
}

dl.generic dd {
    margin-bottom: 1em;
}

.pari {
    color: olive;
}

.paro {
    color: maroon;
}

.comment {
    font-size: 80%;
    color: green;
    white-space: nowrap;
}

table.grid {
    border-collapse: collapse;
}

table.grid td {
    padding: 5px;
    border: 1px solid;
}

table.layout {
    border: 0px;
}

table.layout td {
    padding: 5px;
}

table.table {
    border-collapse: collapse;
}

table.table td {
    padding: 5px;
    border-left: 0px;
    border-right: 0px;
}

table.table tr:last-child {
    border-bottom: 1px solid;
}

table.table th {
    padding: 5px;
    border-top: 1px solid;
    border-bottom: 1px solid;
    border-left: 0px;
    border-right: 0px;
}

.details_summary {
    cursor: pointer;
}

table.toctable {
    width: 100%;
}

table.toctable col:first-child {
    width: 20%;
}

table.toctable col:nth-last-child(2) {
    width: 8%;
}

table.altcolored tr:nth-child(even) {
    background-color: #f3f3f3;
}

    </style>
<!--OP_REF_STYLE_END-->
<script>
    <!--
var active_lang='hdevelop';function switchVisibility(obj,active_lang,new_lang)
{var display_style='inline';
for(var i=0;i<obj.length;i++)
{if(obj.item(i).getAttribute('data-if')==new_lang)
{obj.item(i).style.display=display_style;}
if(obj.item(i).getAttribute('data-if')==active_lang)
{obj.item(i).style.display='none';}}
return;}
function toggleLanguage(new_lang,initial)
{if(active_lang!=new_lang)
{var lis=document.getElementsByTagName('li');for(var i=0;i<lis.length;i++)
{if(lis.item(i).id=='syn-'+new_lang)
{lis.item(i).className='active';}
else
{lis.item(i).className='inactive';}}
var divs=document.getElementsByTagName('div');var spans=document.getElementsByTagName('span');switchVisibility(divs,active_lang,new_lang);switchVisibility(spans,active_lang,new_lang);if(!initial)
{setCookie("halcon_reference_language",new_lang,null,null);}
active_lang=new_lang;}
return;}
function setCookie(name,value,domain,exp_offset,path,secure)
{localStorage.setItem(name,value);}
function getCookie(name)
{return localStorage.getItem(name);}
function initialize()
{var qs=location.href.split('?')[1];var qs_lang_raw=location.href.split('interface=')[1];var qs_lang;if(qs_lang_raw)
{qs_lang=qs_lang_raw.split('#')[0];}
var cookie_lang=getCookie("halcon_reference_language");var new_lang;if((qs_lang=="hdevelop")||(qs_lang=="dotnet")||(qs_lang=="python")||(qs_lang=="cpp")||(qs_lang=="c"))
{new_lang=qs_lang;setCookie("halcon_reference_language",new_lang,null,null);}
else if((cookie_lang=="hdevelop")||(cookie_lang=="dotnet")||(cookie_lang=="python")||(cookie_lang=="cpp")||(cookie_lang=="c"))
{new_lang=cookie_lang;}
else
{new_lang="hdevelop";}
toggleLanguage(new_lang,1);return;}
-->

  </script>
</head>
<body onload="initialize();">
<div class="breadcrumb">
<br class="inv"><a href="index.html">目录</a> / <a href="toc_transformations.html">变换</a> / <a href="toc_transformations_poses.html">Poses</a><br class="inv">
</div>
<div class="body_main">
<div class="tabbar"><ul class="tabs">
<li id="syn-hdevelop" class="active"><a href="javascript:void(0);" onclick="toggleLanguage('hdevelop')" onfocus="blur()">HDevelop</a></li>
<li id="syn-dotnet" class="inactive"><a href="javascript:void(0);" onclick="toggleLanguage('dotnet')" onfocus="blur()">.NET</a></li>
<li id="syn-python" class="inactive"><a href="javascript:void(0);" onclick="toggleLanguage('python')" onfocus="blur()">Python</a></li>
<li id="syn-cpp" class="inactive"><a href="javascript:void(0);" onclick="toggleLanguage('cpp')" onfocus="blur()">C++</a></li>
<li id="syn-c" class="inactive"><a href="javascript:void(0);" onclick="toggleLanguage('c')" onfocus="blur()">C</a></li>
</ul></div>
<div class="indexlink">
<a href="index_classes.html"><span data-if="dotnet" style="display:none;">类别</span><span data-if="cpp" style="display:none;">类别</span></a><span data-if="dotnet" style="display:none;"> | </span><span data-if="cpp" style="display:none;"> | </span><a href="index_by_name.html">算子列表</a>
</div>
<!--OP_REF_HEADER_END-->
<h1 id="sec_name">
<span data-if="hdevelop" style="display:inline;">pose_average</span><span data-if="c" style="display:none;">T_pose_average</span><span data-if="cpp" style="display:none;">PoseAverage</span><span data-if="dotnet" style="display:none;">PoseAverage</span><span data-if="python" style="display:none;">pose_average</span> (算子名称)</h1>
<h2>名称</h2>
<p><code><span data-if="hdevelop" style="display:inline;">pose_average</span><span data-if="c" style="display:none;">T_pose_average</span><span data-if="cpp" style="display:none;">PoseAverage</span><span data-if="dotnet" style="display:none;">PoseAverage</span><span data-if="python" style="display:none;">pose_average</span></code> — Compute the average of a set of poses.</p>
<h2 id="sec_synopsis">参数签名</h2>
<div data-if="hdevelop" style="display:inline;">
<p>
<code><b>pose_average</b>( :  : <a href="#Poses"><i>Poses</i></a>, <a href="#Weights"><i>Weights</i></a>, <a href="#Mode"><i>Mode</i></a>, <a href="#SigmaT"><i>SigmaT</i></a>, <a href="#SigmaR"><i>SigmaR</i></a> : <a href="#AveragePose"><i>AveragePose</i></a>, <a href="#Quality"><i>Quality</i></a>)</code></p>
</div>
<div data-if="c" style="display:none;">
<p>
<code>Herror <b>T_pose_average</b>(const Htuple <a href="#Poses"><i>Poses</i></a>, const Htuple <a href="#Weights"><i>Weights</i></a>, const Htuple <a href="#Mode"><i>Mode</i></a>, const Htuple <a href="#SigmaT"><i>SigmaT</i></a>, const Htuple <a href="#SigmaR"><i>SigmaR</i></a>, Htuple* <a href="#AveragePose"><i>AveragePose</i></a>, Htuple* <a href="#Quality"><i>Quality</i></a>)</code></p>
</div>
<div data-if="cpp" style="display:none;">
<p>
<code>void <b>PoseAverage</b>(const HTuple&amp; <a href="#Poses"><i>Poses</i></a>, const HTuple&amp; <a href="#Weights"><i>Weights</i></a>, const HTuple&amp; <a href="#Mode"><i>Mode</i></a>, const HTuple&amp; <a href="#SigmaT"><i>SigmaT</i></a>, const HTuple&amp; <a href="#SigmaR"><i>SigmaR</i></a>, HTuple* <a href="#AveragePose"><i>AveragePose</i></a>, HTuple* <a href="#Quality"><i>Quality</i></a>)</code></p>
<p>
<code>static <a href="HPose.html">HPose</a> <a href="HPose.html">HPose</a>::<b>PoseAverage</b>(const HPoseArray&amp; <a href="#Poses"><i>Poses</i></a>, const HTuple&amp; <a href="#Weights"><i>Weights</i></a>, const HString&amp; <a href="#Mode"><i>Mode</i></a>, const HTuple&amp; <a href="#SigmaT"><i>SigmaT</i></a>, const HTuple&amp; <a href="#SigmaR"><i>SigmaR</i></a>, HTuple* <a href="#Quality"><i>Quality</i></a>)</code></p>
<p>
<code>static <a href="HPose.html">HPose</a> <a href="HPose.html">HPose</a>::<b>PoseAverage</b>(const HPoseArray&amp; <a href="#Poses"><i>Poses</i></a>, const HTuple&amp; <a href="#Weights"><i>Weights</i></a>, const HString&amp; <a href="#Mode"><i>Mode</i></a>, double <a href="#SigmaT"><i>SigmaT</i></a>, double <a href="#SigmaR"><i>SigmaR</i></a>, HTuple* <a href="#Quality"><i>Quality</i></a>)</code></p>
<p>
<code>static <a href="HPose.html">HPose</a> <a href="HPose.html">HPose</a>::<b>PoseAverage</b>(const HPoseArray&amp; <a href="#Poses"><i>Poses</i></a>, const HTuple&amp; <a href="#Weights"><i>Weights</i></a>, const char* <a href="#Mode"><i>Mode</i></a>, double <a href="#SigmaT"><i>SigmaT</i></a>, double <a href="#SigmaR"><i>SigmaR</i></a>, HTuple* <a href="#Quality"><i>Quality</i></a>)</code></p>
<p>
<code>static <a href="HPose.html">HPose</a> <a href="HPose.html">HPose</a>::<b>PoseAverage</b>(const HPoseArray&amp; <a href="#Poses"><i>Poses</i></a>, const HTuple&amp; <a href="#Weights"><i>Weights</i></a>, const wchar_t* <a href="#Mode"><i>Mode</i></a>, double <a href="#SigmaT"><i>SigmaT</i></a>, double <a href="#SigmaR"><i>SigmaR</i></a>, HTuple* <a href="#Quality"><i>Quality</i></a>)  <span class="signnote">
            (
            Windows only)
          </span></code></p>
</div>
<div data-if="com" style="display:none;"></div>
<div data-if="dotnet" style="display:none;">
<p>
<code>static void <a href="HOperatorSet.html">HOperatorSet</a>.<b>PoseAverage</b>(<a href="HTuple.html">HTuple</a> <a href="#Poses"><i>poses</i></a>, <a href="HTuple.html">HTuple</a> <a href="#Weights"><i>weights</i></a>, <a href="HTuple.html">HTuple</a> <a href="#Mode"><i>mode</i></a>, <a href="HTuple.html">HTuple</a> <a href="#SigmaT"><i>sigmaT</i></a>, <a href="HTuple.html">HTuple</a> <a href="#SigmaR"><i>sigmaR</i></a>, out <a href="HTuple.html">HTuple</a> <a href="#AveragePose"><i>averagePose</i></a>, out <a href="HTuple.html">HTuple</a> <a href="#Quality"><i>quality</i></a>)</code></p>
<p>
<code>static <a href="HPose.html">HPose</a> <a href="HPose.html">HPose</a>.<b>PoseAverage</b>(<a href="HPose.html">HPose[]</a> <a href="#Poses"><i>poses</i></a>, <a href="HTuple.html">HTuple</a> <a href="#Weights"><i>weights</i></a>, string <a href="#Mode"><i>mode</i></a>, <a href="HTuple.html">HTuple</a> <a href="#SigmaT"><i>sigmaT</i></a>, <a href="HTuple.html">HTuple</a> <a href="#SigmaR"><i>sigmaR</i></a>, out <a href="HTuple.html">HTuple</a> <a href="#Quality"><i>quality</i></a>)</code></p>
<p>
<code>static <a href="HPose.html">HPose</a> <a href="HPose.html">HPose</a>.<b>PoseAverage</b>(<a href="HPose.html">HPose[]</a> <a href="#Poses"><i>poses</i></a>, <a href="HTuple.html">HTuple</a> <a href="#Weights"><i>weights</i></a>, string <a href="#Mode"><i>mode</i></a>, double <a href="#SigmaT"><i>sigmaT</i></a>, double <a href="#SigmaR"><i>sigmaR</i></a>, out <a href="HTuple.html">HTuple</a> <a href="#Quality"><i>quality</i></a>)</code></p>
</div>
<div data-if="python" style="display:none;">
<p>
<code>def <b>pose_average</b>(<a href="#Poses"><i>poses</i></a>: Sequence[int], <a href="#Weights"><i>weights</i></a>: Sequence[Union[float, int]], <a href="#Mode"><i>mode</i></a>: str, <a href="#SigmaT"><i>sigma_t</i></a>: Union[float, int, str], <a href="#SigmaR"><i>sigma_r</i></a>: Union[float, int, str]) -&gt; Tuple[Sequence[Union[float, int]], Sequence[float]]</code></p>
</div>
<h2 id="sec_description">描述</h2>
<p><code><span data-if="hdevelop" style="display:inline">pose_average</span><span data-if="c" style="display:none">pose_average</span><span data-if="cpp" style="display:none">PoseAverage</span><span data-if="com" style="display:none">PoseAverage</span><span data-if="dotnet" style="display:none">PoseAverage</span><span data-if="python" style="display:none">pose_average</span></code> computes the average rotation and translation of the
poses passed in <a href="#Poses"><i><code><span data-if="hdevelop" style="display:inline">Poses</span><span data-if="c" style="display:none">Poses</span><span data-if="cpp" style="display:none">Poses</span><span data-if="com" style="display:none">Poses</span><span data-if="dotnet" style="display:none">poses</span><span data-if="python" style="display:none">poses</span></code></i></a>, and returns this average pose in
<a href="#AveragePose"><i><code><span data-if="hdevelop" style="display:inline">AveragePose</span><span data-if="c" style="display:none">AveragePose</span><span data-if="cpp" style="display:none">AveragePose</span><span data-if="com" style="display:none">AveragePose</span><span data-if="dotnet" style="display:none">averagePose</span><span data-if="python" style="display:none">average_pose</span></code></i></a>.
The poses can be weighted using the parameter <a href="#Weights"><i><code><span data-if="hdevelop" style="display:inline">Weights</span><span data-if="c" style="display:none">Weights</span><span data-if="cpp" style="display:none">Weights</span><span data-if="com" style="display:none">Weights</span><span data-if="dotnet" style="display:none">weights</span><span data-if="python" style="display:none">weights</span></code></i></a>. If an
empty tuple is passed as weight, all poses have the same influence on the
result. Otherwise, a tuple that contains one positive weight per
pose needs to be passed. A higher weight leads to a higher influence of
that pose on the average.
</p>
<p><code><span data-if="hdevelop" style="display:inline">pose_average</span><span data-if="c" style="display:none">pose_average</span><span data-if="cpp" style="display:none">PoseAverage</span><span data-if="com" style="display:none">PoseAverage</span><span data-if="dotnet" style="display:none">PoseAverage</span><span data-if="python" style="display:none">pose_average</span></code> supports two modes for averaging the poses, which
can be selected with the parameter <a href="#Mode"><i><code><span data-if="hdevelop" style="display:inline">Mode</span><span data-if="c" style="display:none">Mode</span><span data-if="cpp" style="display:none">Mode</span><span data-if="com" style="display:none">Mode</span><span data-if="dotnet" style="display:none">mode</span><span data-if="python" style="display:none">mode</span></code></i></a>.
<i><span data-if="hdevelop" style="display:inline">'direct'</span><span data-if="c" style="display:none">"direct"</span><span data-if="cpp" style="display:none">"direct"</span><span data-if="com" style="display:none">"direct"</span><span data-if="dotnet" style="display:none">"direct"</span><span data-if="python" style="display:none">"direct"</span></i> selects a direct computation of the average, where the
translation and rotation are averaged independently from each other.
<i><span data-if="hdevelop" style="display:inline">'iterative'</span><span data-if="c" style="display:none">"iterative"</span><span data-if="cpp" style="display:none">"iterative"</span><span data-if="com" style="display:none">"iterative"</span><span data-if="dotnet" style="display:none">"iterative"</span><span data-if="python" style="display:none">"iterative"</span></i> uses the average pose computed by the
<i><span data-if="hdevelop" style="display:inline">'direct'</span><span data-if="c" style="display:none">"direct"</span><span data-if="cpp" style="display:none">"direct"</span><span data-if="com" style="display:none">"direct"</span><span data-if="dotnet" style="display:none">"direct"</span><span data-if="python" style="display:none">"direct"</span></i> method as initial value for an iterative method, which
computes the local mode of the poses.
The iterative method is slower than the direct method. However, it returns
more accurate poses especially in the presence of outlier poses, as such
outliers are downweighted automatically.
</p>
<p>For the iterative method, the relative weight of the translation and the
rotation can be set with the parameters <a href="#SigmaT"><i><code><span data-if="hdevelop" style="display:inline">SigmaT</span><span data-if="c" style="display:none">SigmaT</span><span data-if="cpp" style="display:none">SigmaT</span><span data-if="com" style="display:none">SigmaT</span><span data-if="dotnet" style="display:none">sigmaT</span><span data-if="python" style="display:none">sigma_t</span></code></i></a> and
<a href="#SigmaR"><i><code><span data-if="hdevelop" style="display:inline">SigmaR</span><span data-if="c" style="display:none">SigmaR</span><span data-if="cpp" style="display:none">SigmaR</span><span data-if="com" style="display:none">SigmaR</span><span data-if="dotnet" style="display:none">sigmaR</span><span data-if="python" style="display:none">sigma_r</span></code></i></a>, respectively. Both values can be set to <i><span data-if="hdevelop" style="display:inline">'auto'</span><span data-if="c" style="display:none">"auto"</span><span data-if="cpp" style="display:none">"auto"</span><span data-if="com" style="display:none">"auto"</span><span data-if="dotnet" style="display:none">"auto"</span><span data-if="python" style="display:none">"auto"</span></i>,
in which case they are automatically estimated. In this case,
<a href="#SigmaT"><i><code><span data-if="hdevelop" style="display:inline">SigmaT</span><span data-if="c" style="display:none">SigmaT</span><span data-if="cpp" style="display:none">SigmaT</span><span data-if="com" style="display:none">SigmaT</span><span data-if="dotnet" style="display:none">sigmaT</span><span data-if="python" style="display:none">sigma_t</span></code></i></a> is set to the spread of the translations of the poses, and
<a href="#SigmaR"><i><code><span data-if="hdevelop" style="display:inline">SigmaR</span><span data-if="c" style="display:none">SigmaR</span><span data-if="cpp" style="display:none">SigmaR</span><span data-if="com" style="display:none">SigmaR</span><span data-if="dotnet" style="display:none">sigmaR</span><span data-if="python" style="display:none">sigma_r</span></code></i></a> is set to a constant value.
Both values describe the expected spread of the translation and the
rotation, and influence the weighting of the poses.
For the direct method, both parameters are ignored.
</p>
<p>A measure of the quality of the computed pose is returned in
<a href="#Quality"><i><code><span data-if="hdevelop" style="display:inline">Quality</span><span data-if="c" style="display:none">Quality</span><span data-if="cpp" style="display:none">Quality</span><span data-if="com" style="display:none">Quality</span><span data-if="dotnet" style="display:none">quality</span><span data-if="python" style="display:none">quality</span></code></i></a>.
<a href="#Quality"><i><code><span data-if="hdevelop" style="display:inline">Quality</span><span data-if="c" style="display:none">Quality</span><span data-if="cpp" style="display:none">Quality</span><span data-if="com" style="display:none">Quality</span><span data-if="dotnet" style="display:none">quality</span><span data-if="python" style="display:none">quality</span></code></i></a> contains a tuple with four elements, which describe
the average and maximum deviation of the passed poses from the returned
average pose <a href="#AveragePose"><i><code><span data-if="hdevelop" style="display:inline">AveragePose</span><span data-if="c" style="display:none">AveragePose</span><span data-if="cpp" style="display:none">AveragePose</span><span data-if="com" style="display:none">AveragePose</span><span data-if="dotnet" style="display:none">averagePose</span><span data-if="python" style="display:none">average_pose</span></code></i></a>.
The order of the values is: Root-Mean-Square error of the translation,
Root-Mean-Square error of the rotation, maximum translation and maximum
rotation deviation. The weights passed in <a href="#Weights"><i><code><span data-if="hdevelop" style="display:inline">Weights</span><span data-if="c" style="display:none">Weights</span><span data-if="cpp" style="display:none">Weights</span><span data-if="com" style="display:none">Weights</span><span data-if="dotnet" style="display:none">weights</span><span data-if="python" style="display:none">weights</span></code></i></a> are used in the
Root-Mean-Square errors of translation and rotation, but not for the last
two quality measures.
</p>
<h2 id="sec_execution">运行信息</h2>
<ul>
  <li>多线程类型:可重入(与非独占操作符并行运行)。</li>
<li>多线程作用域:全局(可以从任何线程调用)。</li>
  <li>未经并行化处理。</li>
</ul>
<h2 id="sec_parameters">参数表</h2>
  <div class="par">
<div class="parhead">
<span id="Poses" class="parname"><b><code><span data-if="hdevelop" style="display:inline">Poses</span><span data-if="c" style="display:none">Poses</span><span data-if="cpp" style="display:none">Poses</span><span data-if="com" style="display:none">Poses</span><span data-if="dotnet" style="display:none">poses</span><span data-if="python" style="display:none">poses</span></code></b> (input_control)  </span><span>pose-array <code>→</code> <span data-if="dotnet" style="display:none"><a href="HPose.html">HPose</a>, </span><span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Sequence[int]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (integer)</span><span data-if="dotnet" style="display:none"> (<i>int</i> / </span><span data-if="dotnet" style="display:none">long)</span><span data-if="cpp" style="display:none"> (<i>Hlong</i>)</span><span data-if="c" style="display:none"> (<i>Hlong</i>)</span></span>
</div>
<p class="pardesc">Set of poses of which the average if computed.</p>
</div>
  <div class="par">
<div class="parhead">
<span id="Weights" class="parname"><b><code><span data-if="hdevelop" style="display:inline">Weights</span><span data-if="c" style="display:none">Weights</span><span data-if="cpp" style="display:none">Weights</span><span data-if="com" style="display:none">Weights</span><span data-if="dotnet" style="display:none">weights</span><span data-if="python" style="display:none">weights</span></code></b> (input_control)  </span><span>number-array <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Sequence[Union[float, int]]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (real / </span><span data-if="hdevelop" style="display:inline">integer)</span><span data-if="dotnet" style="display:none"> (<i>double</i> / </span><span data-if="dotnet" style="display:none">int / </span><span data-if="dotnet" style="display:none">long)</span><span data-if="cpp" style="display:none"> (<i>double</i> / </span><span data-if="cpp" style="display:none">Hlong)</span><span data-if="c" style="display:none"> (<i>double</i> / </span><span data-if="c" style="display:none">Hlong)</span></span>
</div>
<p class="pardesc">Empty tuple, or one weight per pose.</p>
<p class="pardesc"><span class="parcat">Default:
      </span>[]</p>
<p class="pardesc"><span class="parcat">Restriction:
      </span><code>Weights &gt; 0 &amp;&amp; length(Weights) == 0 || length(Weights) == length(Poses) / 7</code></p>
</div>
  <div class="par">
<div class="parhead">
<span id="Mode" class="parname"><b><code><span data-if="hdevelop" style="display:inline">Mode</span><span data-if="c" style="display:none">Mode</span><span data-if="cpp" style="display:none">Mode</span><span data-if="com" style="display:none">Mode</span><span data-if="dotnet" style="display:none">mode</span><span data-if="python" style="display:none">mode</span></code></b> (input_control)  </span><span>string <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">str</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (string)</span><span data-if="dotnet" style="display:none"> (<i>string</i>)</span><span data-if="cpp" style="display:none"> (<i>HString</i>)</span><span data-if="c" style="display:none"> (<i>char*</i>)</span></span>
</div>
<p class="pardesc">Averaging mode.</p>
<p class="pardesc"><span class="parcat">Default:
      </span>
    <span data-if="hdevelop" style="display:inline">'iterative'</span>
    <span data-if="c" style="display:none">"iterative"</span>
    <span data-if="cpp" style="display:none">"iterative"</span>
    <span data-if="com" style="display:none">"iterative"</span>
    <span data-if="dotnet" style="display:none">"iterative"</span>
    <span data-if="python" style="display:none">"iterative"</span>
</p>
<p class="pardesc"><span class="parcat">List of values:
      </span><span data-if="hdevelop" style="display:inline">'direct'</span><span data-if="c" style="display:none">"direct"</span><span data-if="cpp" style="display:none">"direct"</span><span data-if="com" style="display:none">"direct"</span><span data-if="dotnet" style="display:none">"direct"</span><span data-if="python" style="display:none">"direct"</span>, <span data-if="hdevelop" style="display:inline">'iterative'</span><span data-if="c" style="display:none">"iterative"</span><span data-if="cpp" style="display:none">"iterative"</span><span data-if="com" style="display:none">"iterative"</span><span data-if="dotnet" style="display:none">"iterative"</span><span data-if="python" style="display:none">"iterative"</span></p>
</div>
  <div class="par">
<div class="parhead">
<span id="SigmaT" class="parname"><b><code><span data-if="hdevelop" style="display:inline">SigmaT</span><span data-if="c" style="display:none">SigmaT</span><span data-if="cpp" style="display:none">SigmaT</span><span data-if="com" style="display:none">SigmaT</span><span data-if="dotnet" style="display:none">sigmaT</span><span data-if="python" style="display:none">sigma_t</span></code></b> (input_control)  </span><span>number <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Union[float, int, str]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (real / </span><span data-if="hdevelop" style="display:inline">integer / </span><span data-if="hdevelop" style="display:inline">string)</span><span data-if="dotnet" style="display:none"> (<i>double</i> / </span><span data-if="dotnet" style="display:none">int / </span><span data-if="dotnet" style="display:none">long / </span><span data-if="dotnet" style="display:none">string)</span><span data-if="cpp" style="display:none"> (<i>double</i> / </span><span data-if="cpp" style="display:none">Hlong / </span><span data-if="cpp" style="display:none">HString)</span><span data-if="c" style="display:none"> (<i>double</i> / </span><span data-if="c" style="display:none">Hlong / </span><span data-if="c" style="display:none">char*)</span></span>
</div>
<p class="pardesc">Weight of the translation.</p>
<p class="pardesc"><span class="parcat">Default:
      </span>
    <span data-if="hdevelop" style="display:inline">'auto'</span>
    <span data-if="c" style="display:none">"auto"</span>
    <span data-if="cpp" style="display:none">"auto"</span>
    <span data-if="com" style="display:none">"auto"</span>
    <span data-if="dotnet" style="display:none">"auto"</span>
    <span data-if="python" style="display:none">"auto"</span>
</p>
<p class="pardesc"><span class="parcat">Suggested values:
      </span><span data-if="hdevelop" style="display:inline">'auto'</span><span data-if="c" style="display:none">"auto"</span><span data-if="cpp" style="display:none">"auto"</span><span data-if="com" style="display:none">"auto"</span><span data-if="dotnet" style="display:none">"auto"</span><span data-if="python" style="display:none">"auto"</span>, 0.1, 1, 100</p>
</div>
  <div class="par">
<div class="parhead">
<span id="SigmaR" class="parname"><b><code><span data-if="hdevelop" style="display:inline">SigmaR</span><span data-if="c" style="display:none">SigmaR</span><span data-if="cpp" style="display:none">SigmaR</span><span data-if="com" style="display:none">SigmaR</span><span data-if="dotnet" style="display:none">sigmaR</span><span data-if="python" style="display:none">sigma_r</span></code></b> (input_control)  </span><span>number <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Union[float, int, str]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (real / </span><span data-if="hdevelop" style="display:inline">integer / </span><span data-if="hdevelop" style="display:inline">string)</span><span data-if="dotnet" style="display:none"> (<i>double</i> / </span><span data-if="dotnet" style="display:none">int / </span><span data-if="dotnet" style="display:none">long / </span><span data-if="dotnet" style="display:none">string)</span><span data-if="cpp" style="display:none"> (<i>double</i> / </span><span data-if="cpp" style="display:none">Hlong / </span><span data-if="cpp" style="display:none">HString)</span><span data-if="c" style="display:none"> (<i>double</i> / </span><span data-if="c" style="display:none">Hlong / </span><span data-if="c" style="display:none">char*)</span></span>
</div>
<p class="pardesc">Weight of the rotation.</p>
<p class="pardesc"><span class="parcat">Default:
      </span>
    <span data-if="hdevelop" style="display:inline">'auto'</span>
    <span data-if="c" style="display:none">"auto"</span>
    <span data-if="cpp" style="display:none">"auto"</span>
    <span data-if="com" style="display:none">"auto"</span>
    <span data-if="dotnet" style="display:none">"auto"</span>
    <span data-if="python" style="display:none">"auto"</span>
</p>
<p class="pardesc"><span class="parcat">Suggested values:
      </span><span data-if="hdevelop" style="display:inline">'auto'</span><span data-if="c" style="display:none">"auto"</span><span data-if="cpp" style="display:none">"auto"</span><span data-if="com" style="display:none">"auto"</span><span data-if="dotnet" style="display:none">"auto"</span><span data-if="python" style="display:none">"auto"</span>, 0.1, 1, 10</p>
</div>
  <div class="par">
<div class="parhead">
<span id="AveragePose" class="parname"><b><code><span data-if="hdevelop" style="display:inline">AveragePose</span><span data-if="c" style="display:none">AveragePose</span><span data-if="cpp" style="display:none">AveragePose</span><span data-if="com" style="display:none">AveragePose</span><span data-if="dotnet" style="display:none">averagePose</span><span data-if="python" style="display:none">average_pose</span></code></b> (output_control)  </span><span>pose <code>→</code> <span data-if="dotnet" style="display:none"><a href="HPose.html">HPose</a>, </span><span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Sequence[Union[float, int]]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (real / </span><span data-if="hdevelop" style="display:inline">integer)</span><span data-if="dotnet" style="display:none"> (<i>double</i> / </span><span data-if="dotnet" style="display:none">int / </span><span data-if="dotnet" style="display:none">long)</span><span data-if="cpp" style="display:none"> (<i>double</i> / </span><span data-if="cpp" style="display:none">Hlong)</span><span data-if="c" style="display:none"> (<i>double</i> / </span><span data-if="c" style="display:none">Hlong)</span></span>
</div>
<p class="pardesc">Weighted mean of the poses.</p>
</div>
  <div class="par">
<div class="parhead">
<span id="Quality" class="parname"><b><code><span data-if="hdevelop" style="display:inline">Quality</span><span data-if="c" style="display:none">Quality</span><span data-if="cpp" style="display:none">Quality</span><span data-if="com" style="display:none">Quality</span><span data-if="dotnet" style="display:none">quality</span><span data-if="python" style="display:none">quality</span></code></b> (output_control)  </span><span>number-array <code>→</code> <span data-if="dotnet" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="python" style="display:none">Sequence[float]</span><span data-if="cpp" style="display:none"><a href="HTuple.html">HTuple</a></span><span data-if="c" style="display:none">Htuple</span><span data-if="hdevelop" style="display:inline"> (real)</span><span data-if="dotnet" style="display:none"> (<i>double</i>)</span><span data-if="cpp" style="display:none"> (<i>double</i>)</span><span data-if="c" style="display:none"> (<i>double</i>)</span></span>
</div>
<p class="pardesc">Deviation of the mean from the input poses.</p>
<p class="pardesc"><span class="parcat">Assertion:
      </span><code>length(Quality) == 4</code></p>
</div>
<h2 id="sec_result">结果</h2>
<p>如果参数均有效，算子 <code><span data-if="hdevelop" style="display:inline">pose_average</span><span data-if="c" style="display:none">pose_average</span><span data-if="cpp" style="display:none">PoseAverage</span><span data-if="com" style="display:none">PoseAverage</span><span data-if="dotnet" style="display:none">PoseAverage</span><span data-if="python" style="display:none">pose_average</span></code> returns
<TT>2</TT> (
      <TT>H_MSG_TRUE</TT>)
    . 如有必要，将引发异常。</p>
<h2 id="sec_predecessors">可能的前置算子</h2>
<p>
<code><a href="read_pose.html"><span data-if="hdevelop" style="display:inline">read_pose</span><span data-if="c" style="display:none">read_pose</span><span data-if="cpp" style="display:none">ReadPose</span><span data-if="com" style="display:none">ReadPose</span><span data-if="dotnet" style="display:none">ReadPose</span><span data-if="python" style="display:none">read_pose</span></a></code>, 
<code><a href="hom_mat3d_to_pose.html"><span data-if="hdevelop" style="display:inline">hom_mat3d_to_pose</span><span data-if="c" style="display:none">hom_mat3d_to_pose</span><span data-if="cpp" style="display:none">HomMat3dToPose</span><span data-if="com" style="display:none">HomMat3dToPose</span><span data-if="dotnet" style="display:none">HomMat3dToPose</span><span data-if="python" style="display:none">hom_mat3d_to_pose</span></a></code>
</p>
<h2 id="sec_see">参考其它</h2>
<p>
<code><a href="read_pose.html"><span data-if="hdevelop" style="display:inline">read_pose</span><span data-if="c" style="display:none">read_pose</span><span data-if="cpp" style="display:none">ReadPose</span><span data-if="com" style="display:none">ReadPose</span><span data-if="dotnet" style="display:none">ReadPose</span><span data-if="python" style="display:none">read_pose</span></a></code>, 
<code><a href="hom_mat3d_to_pose.html"><span data-if="hdevelop" style="display:inline">hom_mat3d_to_pose</span><span data-if="c" style="display:none">hom_mat3d_to_pose</span><span data-if="cpp" style="display:none">HomMat3dToPose</span><span data-if="com" style="display:none">HomMat3dToPose</span><span data-if="dotnet" style="display:none">HomMat3dToPose</span><span data-if="python" style="display:none">hom_mat3d_to_pose</span></a></code>, 
<code><a href="pose_to_hom_mat3d.html"><span data-if="hdevelop" style="display:inline">pose_to_hom_mat3d</span><span data-if="c" style="display:none">pose_to_hom_mat3d</span><span data-if="cpp" style="display:none">PoseToHomMat3d</span><span data-if="com" style="display:none">PoseToHomMat3d</span><span data-if="dotnet" style="display:none">PoseToHomMat3d</span><span data-if="python" style="display:none">pose_to_hom_mat3d</span></a></code>
</p>
<h2 id="sec_module">模块</h2>
<p>
Foundation</p>
<!--OP_REF_FOOTER_START-->
<hr>
<div class="indexlink">
<a href="index_classes.html"><span data-if="dotnet" style="display:none;">类别</span><span data-if="cpp" style="display:none;">类别</span></a><span data-if="dotnet" style="display:none;"> | </span><span data-if="cpp" style="display:none;"> | </span><a href="index_by_name.html">算子列表</a>
</div>
<div class="footer">
<div class="copyright">HALCON算子参考手册 Copyright © 2015-2023 51Halcon</div>
</div>
</div>
</body>
</html>
